﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Commander.program;
using System.Windows;
using Commander.Views;
using System.Windows.Input;
using Commander.Structures;
using System.IO;

namespace Commander.Classes
{
    /// <summary>
    /// Клас для роботи з файлами и папками
    /// </summary>
    public class Work
    {
        /// <summary>
        /// Переименовать папку
        /// </summary>
        /// <param name="Patch"></param>
        /// <param name="ioView"></param>
        public static void Modify(string Patch,IOView ioView)
        {
            if (Keyboard.Modifiers != ModifierKeys.Control)
            {
                if (ioView != null)
                {
                    Remove rm = new Remove();
                    if (ioView.Size == "<Папка>")
                    {
                        rm.SetName(Patch, ioView.Name + @"\", 1);
                    }
                    else
                    {
                        rm.SetName(Patch, ioView.Name + "." + ioView.Type, 2);
                    }
                    rm.ShowInTaskbar = false;
                    rm.ShowDialog();
                }
            }
        }
        
        /// <summary>
        /// Редактирование файлов
        /// </summary>
        /// <param name="data"></param>
        public static void Edit(ListOfFiles data)
        {
            foreach (IOView item in data.Files)
            {
                if (item.Type == "txt")
                {
                    Notepad np = new Notepad();
                    np.NameFile = data.Patch + item.Name + "." + item.Type;
                    np.Show();
                }
            }
        }

        /// <summary>
        /// Создать текстовий файл и начать его редактировать
        /// </summary>
        /// <param name="Patch">директория где создать текстовий файл</param>
        public static void Create(string Patch)
        {
            CreateFile crtf = new CreateFile(Patch);
            crtf.ShowInTaskbar = false;
            crtf.ShowDialog();
            if (crtf.NameFile != null)
            {
                Notepad notepad = new Notepad();
                notepad.NameFile = crtf.NameFile;
                notepad.Show();
            }
        }

        /// <summary>
        /// Создать папку по указаному пути
        /// </summary>
        /// <param name="Patch">директория где создать папку</param>
        public static void CreateDir(string Patch)
        {
            CreatFolder crtf = new CreatFolder(Patch);
            crtf.ShowInTaskbar = false;
            crtf.ShowDialog();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="Patch"></param>
        /// <param name="ioView"></param>
        public static void View(string Patch,IOView ioView)
        {
            if (ioView.Type == "html")
            {
                string str = Patch + ioView.Name + "." + ioView.Type;
                webbrowser web = new webbrowser();
                web.NameFile = str;
                web.Show();
            }

        }

        public static void Copy(Info data)
        {
            if (data.OldPatch != data.NewPatch)
            {
                newCopy nc = new newCopy();
                nc.Data = data;
                nc.ShowInTaskbar = false;
                nc.ShowDialog();
            }
            else
            {
                MessageBox.Show("Нельзя копировать самого в себя!");
            }
        }

        public static void Move(Info data)
        {
            newMoves nm = new newMoves();
            nm.Data = data;
            nm.ShowInTaskbar = false;
            nm.ShowDialog();

        }

        /// <summary>
        /// Метод для удаления файлов и папок
        /// </summary>
        /// <param name="data"></param>
        public static void Delete(ListOfFiles data)
        {
            MessageBoxResult result = MessageBox.Show("Ви действительно хотите удалить ?","Удаление", MessageBoxButton.YesNo, MessageBoxImage.Question);
            if (result == MessageBoxResult.Yes)
            {
                Deletes del = new Deletes(data);
                del.ShowInTaskbar = false;
                del.ShowDialog();
            }
        }

        public static void MoveToBasket(ListOfFiles data)
        {

        }

        /// <summary>
        /// Метод для подчета количества файлов
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static int CountFile(Info data)
        {
            int count = 0;
            foreach (IOView item in data.files)
            {
                if (item.Size == "<Папка>")
                {
                    count += Directory.GetFiles(data.OldPatch + item.Name, "*.*", SearchOption.AllDirectories).Length;
                }
                else
                {
                    count++;
                }
            }
            return count;
        }
    }
}
